{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np # type: ignore\n",
    "import matplotlib as mpl  # type: ignore\n",
    "import matplotlib.pyplot as plt  # type: ignore"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1b7cedff110>,\n",
       " <matplotlib.lines.Line2D at 0x1b7cedd0110>]"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x=np.linspace(0,100*np.pi)\n",
    "a=1\n",
    "plt.plot(x,np.sin(20*x+np.pi/2),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Pages: 1 -->\n",
       "<svg width=\"246pt\" height=\"279pt\"\n",
       " viewBox=\"0.00 0.00 245.57 278.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 274.5)\">\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-274.5 241.57,-274.5 241.57,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"117.57\" cy=\"-252.5\" rx=\"28.32\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"117.57\" y=\"-247.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Start</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"117.57\" cy=\"-179.5\" rx=\"48.28\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"117.57\" y=\"-174.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Input=&gt;X</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M117.57,-234.31C117.57,-226.73 117.57,-217.6 117.57,-209.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"121.07,-209.04 117.57,-199.04 114.07,-209.04 121.07,-209.04\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"117.57\" cy=\"-106.5\" rx=\"72.34\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"117.57\" y=\"-101.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">for(i=0;i&lt;0;i++)</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M117.57,-161.31C117.57,-153.73 117.57,-144.6 117.57,-136.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"121.07,-136.04 117.57,-126.04 114.07,-136.04 121.07,-136.04\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"82.57\" cy=\"-18\" rx=\"82.57\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"82.57\" y=\"-12.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Plot Sinx and Cosx</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M96.4,-88.99C91.14,-83.7 86.2,-77.41 83.32,-70.5 80.39,-63.46 79.33,-55.39 79.22,-47.76\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"82.71,-48 79.63,-37.86 75.72,-47.71 82.71,-48\"/>\n",
       "<text text-anchor=\"middle\" x=\"93.45\" y=\"-57.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"210.57\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
       "<text text-anchor=\"middle\" x=\"210.57\" y=\"-12.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">End</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M135.5,-88.82C150.2,-75.15 171.11,-55.7 187.13,-40.8\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"189.41,-43.46 194.35,-34.08 184.65,-38.33 189.41,-43.46\"/>\n",
       "<text text-anchor=\"middle\" x=\"180.65\" y=\"-57.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;3 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M94.24,-36.3C97.58,-41.8 101.02,-48 103.57,-54 106.71,-61.36 109.32,-69.61 111.41,-77.32\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"107.99,-78.08 113.8,-86.94 114.78,-76.39 107.99,-78.08\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x1e929053ee0>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "''' import graphviz as viz\n",
    "viz.Digraph '''\n",
    "from graphviz import Digraph\n",
    "dot = Digraph()\n",
    "dot.node('1','Start')\n",
    "dot.node('2','Input=>X')\n",
    "dot.node('3','for(i=0;i<0;i++)')\n",
    "dot.node('4','Plot Sinx and Cosx')\n",
    "dot.node('5','End')\n",
    "dot.edge('1','2')\n",
    "dot.edge('2','3')\n",
    "dot.edge('3','4',label='Yes')\n",
    "dot.edge('3','5',label='No')\n",
    "dot.edge('4','3')\n",
    "\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                                                *                                                                                                                                 \n",
      "                                                                                                                               * *                                                                                                                                \n",
      "                                                                                                                              * * *                                                                                                                               \n",
      "                                                                                                                            * ** ** *                                                                                                                             \n",
      "                                                                                                                          * ** *** ** *                                                                                                                           \n",
      "                                                                                                                     * *** ***** ***** *** *                                                                                                                      \n",
      "                                                                                                             * *** ******** ********** ******** *** *                                                                                                             \n",
      "                                                                                           * **** *********** ****************** ****************** *********** **** *                                                                                            \n",
      "                                                            * **** ************** **************************** *********************************** **************************** ************** **** *                                                             \n",
      "* ***** ****************** ****************************************** *************************************************************** *************************************************************** ****************************************** ****************** ***** *\n"
     ]
    }
   ],
   "source": [
    "def generate_pascals_triangle(n):\n",
    "    triangle = []\n",
    "    for i in range(n):\n",
    "        row = [1] * (i + 1)\n",
    "        for j in range(1, i):\n",
    "            row[j] = triangle[i-1][j-1] + triangle[i-1][j]\n",
    "        triangle.append(row)\n",
    "    return triangle\n",
    " \n",
    "def draw_pascals_triangle(triangle, max_value_per_star=2):\n",
    "    # 确定三角形中的最大值，用于缩放星号数量\n",
    "    max_value = max(max(row) for row in triangle)\n",
    "    \n",
    "    # 根据元素值确定星号数量的函数\n",
    "    def num_stars(value):\n",
    "        return (value // max_value_per_star) + (1 if value % max_value_per_star != 0 else 0)\n",
    "    \n",
    "    # 计算每行需要的最大宽度（包括空格）\n",
    "    max_width = max(len(''.join(['*' * num_stars(num) for num in row])) for row in triangle)\n",
    "    \n",
    "    for row in triangle:\n",
    "        # 生成星号字符串列表\n",
    "        stars = ['*' * num_stars(num) for num in row]\n",
    "        # 将星号列表转换为字符串，并用空格填充到最大宽度\n",
    "        formatted_row = ' '.join(stars).center(max_width)\n",
    "        # 打印当前行\n",
    "        print(formatted_row)\n",
    " \n",
    "# 设置要生成的杨辉三角形的行数\n",
    "n = 10\n",
    "triangle = generate_pascals_triangle(n)\n",
    "draw_pascals_triangle(triangle)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      *\n",
      "     ***\n",
      "    *****\n",
      "   *******\n",
      "  *********\n",
      " ***********\n",
      "*************\n",
      "  **\n",
      "  **\n"
     ]
    }
   ],
   "source": [
    "def print_tree(height):\n",
    "    # 绘制树冠部分\n",
    "    for i in range(height):\n",
    "        # 每一行先打印空格，使星号居中\n",
    "        print(' ' * (height - i - 1) + '*' * (2 * i + 1))\n",
    "    \n",
    "    # 绘制树干部分\n",
    "    trunk_width = height // 3\n",
    "    trunk_height = height // 3\n",
    "    trunk_space = (height - trunk_width) // 2\n",
    "    \n",
    "    for i in range(trunk_height):\n",
    "        print(' ' * trunk_space + '*' * trunk_width)\n",
    "\n",
    "# 调用函数并设置树的高度\n",
    "print_tree(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "你的等级是: B\n"
     ]
    }
   ],
   "source": [
    "def determine_grade(score):\n",
    "     if score >= 90:\n",
    "         return 'A'\n",
    "     elif score >= 80:\n",
    "         return 'B'\n",
    "     elif score >= 70:\n",
    "         return 'C'\n",
    "     elif score >= 60:\n",
    "         return 'D'\n",
    "     else:\n",
    "         return 'F'\n",
    "\n",
    "def main():\n",
    "    try:\n",
    "         score = float(input(\"请输入成绩（0-100）: \"))\n",
    "         if not 0 <= score <= 100:\n",
    "             print(\"成绩必须在0到100之间。\")\n",
    "         else:\n",
    "            grade = determine_grade(score)\n",
    "            print(f\"你的等级是: {grade}\")\n",
    "    except ValueError:\n",
    "        print(\"请输入一个有效的数字。\")\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"436pt\" height=\"676pt\"\n",
       " viewBox=\"0.00 0.00 436.02 675.50\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 671.5)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-671.5 432.02,-671.5 432.02,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"331.01,-667.5 277.01,-667.5 277.01,-631.5 331.01,-631.5 331.01,-667.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-643.33\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"420.58,-594.5 235.15,-594.5 187.45,-558.5 372.87,-558.5 420.58,-594.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-571.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">请输入成绩=?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-631.31C304.01,-623.73 304.01,-614.6 304.01,-606.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-606.04 304.01,-596.04 300.51,-606.04 307.51,-606.04\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"304.01,-521.5 180,-503.5 304.01,-485.5 428.02,-503.5 304.01,-521.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"304.01\" y=\"-498.45\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于90?</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M304.01,-558.31C304.01,-550.73 304.01,-541.6 304.01,-533.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"307.51,-533.04 304.01,-523.04 300.51,-533.04 307.51,-533.04\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"228.01,-433 104,-415 228.01,-397 352.02,-415 228.01,-433\"/>\n",
       "<text text-anchor=\"middle\" x=\"228.01\" y=\"-409.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于80?</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge9\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M290.42,-487.04C278.86,-473.87 262.07,-454.76 248.81,-439.67\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"251.71,-437.67 242.48,-432.47 246.45,-442.29 251.71,-437.67\"/>\n",
       "<text text-anchor=\"middle\" x=\"281.07\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- a -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>a</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"407.51,-379 352.51,-379 352.51,-343 407.51,-343 407.51,-379\"/>\n",
       "<text text-anchor=\"middle\" x=\"380.01\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print A</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;a -->\n",
       "<g id=\"edge8\" class=\"edge\">\n",
       "<title>3&#45;&gt;a</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M319.74,-487.33C332.59,-474.11 350.32,-453.82 361.01,-433 367.82,-419.74 372.37,-403.8 375.3,-390.39\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"378.68,-391.36 377.19,-380.87 371.81,-390 378.68,-391.36\"/>\n",
       "<text text-anchor=\"middle\" x=\"359.23\" y=\"-454.2\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"175.01,-325 51,-307 175.01,-289 299.02,-307 175.01,-325\"/>\n",
       "<text text-anchor=\"middle\" x=\"175.01\" y=\"-301.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于70?</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge11\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M219.96,-397.9C211.56,-381.09 198.24,-354.45 188.27,-334.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"191.42,-332.98 183.81,-325.6 185.16,-336.11 191.42,-332.98\"/>\n",
       "<text text-anchor=\"middle\" x=\"217.61\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- b -->\n",
       "<g id=\"node8\" class=\"node\">\n",
       "<title>b</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"356.51,-271 301.51,-271 301.51,-235 356.51,-235 356.51,-271\"/>\n",
       "<text text-anchor=\"middle\" x=\"329.01\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print B</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;b -->\n",
       "<g id=\"edge10\" class=\"edge\">\n",
       "<title>4&#45;&gt;b</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M245.14,-399.3C263.23,-382.9 291.38,-354.74 308.01,-325 315.34,-311.9 320.35,-295.97 323.64,-282.53\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"327.01,-283.48 325.76,-272.96 320.18,-281.96 327.01,-283.48\"/>\n",
       "<text text-anchor=\"middle\" x=\"305.53\" y=\"-355.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"124.01,-217 0,-199 124.01,-181 248.02,-199 124.01,-217\"/>\n",
       "<text text-anchor=\"middle\" x=\"124.01\" y=\"-193.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">x是否大等于60?</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge13\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.27,-289.9C159.18,-273.09 146.36,-246.45 136.77,-226.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"139.98,-225.11 132.49,-217.61 133.67,-228.14 139.98,-225.11\"/>\n",
       "<text text-anchor=\"middle\" x=\"165.31\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- c -->\n",
       "<g id=\"node9\" class=\"node\">\n",
       "<title>c</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.51,-163 248.51,-163 248.51,-127 303.51,-127 303.51,-163\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print C</text>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;c -->\n",
       "<g id=\"edge12\" class=\"edge\">\n",
       "<title>5&#45;&gt;c</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M193.08,-291.18C211.77,-274.88 240.5,-247 257.01,-217 264.24,-203.86 268.84,-187.81 271.7,-174.3\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"275.09,-175.18 273.5,-164.71 268.21,-173.89 275.09,-175.18\"/>\n",
       "<text text-anchor=\"middle\" x=\"254.43\" y=\"-247.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- d -->\n",
       "<g id=\"node10\" class=\"node\">\n",
       "<title>d</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"166.89,-109 111.14,-109 111.14,-73 166.89,-73 166.89,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"139.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print D</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;d -->\n",
       "<g id=\"edge14\" class=\"edge\">\n",
       "<title>6&#45;&gt;d</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M126.42,-180.97C128.73,-164.69 132.24,-139.82 134.98,-120.52\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"138.41,-121.23 136.35,-110.84 131.48,-120.25 138.41,-121.23\"/>\n",
       "<text text-anchor=\"middle\" x=\"143.86\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Yes</text>\n",
       "</g>\n",
       "<!-- e -->\n",
       "<g id=\"node11\" class=\"node\">\n",
       "<title>e</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"245.14,-109 190.89,-109 190.89,-73 245.14,-73 245.14,-109\"/>\n",
       "<text text-anchor=\"middle\" x=\"218.01\" y=\"-85.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Print E</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;e -->\n",
       "<g id=\"edge15\" class=\"edge\">\n",
       "<title>6&#45;&gt;e</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M139.14,-182.89C145.12,-176.8 151.98,-169.65 158.01,-163 171.22,-148.43 185.45,-131.64 196.74,-118.04\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"199.4,-120.32 203.07,-110.38 194,-115.86 199.4,-120.32\"/>\n",
       "<text text-anchor=\"middle\" x=\"196.26\" y=\"-139.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">No</text>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node12\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"303.01,-36 249.01,-36 249.01,0 303.01,0 303.01,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"276.01\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- a&#45;&gt;7 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>a&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M378.7,-342.75C377.22,-321.79 375.01,-285.32 375.01,-254 375.01,-254 375.01,-254 375.01,-90 375.01,-58.72 341.98,-39.89 314.08,-29.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"315.35,-26.3 304.76,-26.38 313.09,-32.92 315.35,-26.3\"/>\n",
       "</g>\n",
       "<!-- b&#45;&gt;7 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>b&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M327.05,-234.9C324.14,-210.72 318.12,-165.22 310.01,-127 303.03,-94.09 300.72,-85.89 290.01,-54 289.25,-51.72 288.41,-49.38 287.55,-47.03\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"290.81,-45.77 283.93,-37.71 284.29,-48.3 290.81,-45.77\"/>\n",
       "</g>\n",
       "<!-- c&#45;&gt;7 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>c&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M276.01,-126.62C276.01,-106.19 276.01,-71.99 276.01,-47.62\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"279.51,-47.75 276.01,-37.75 272.51,-47.75 279.51,-47.75\"/>\n",
       "</g>\n",
       "<!-- d&#45;&gt;7 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>d&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M167.07,-75.46C187.84,-64.7 216.34,-49.92 238.99,-38.19\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"240.32,-41.44 247.58,-33.73 237.1,-35.23 240.32,-41.44\"/>\n",
       "</g>\n",
       "<!-- e&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>e&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M232.05,-72.81C238.89,-64.44 247.26,-54.2 254.85,-44.9\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"257.53,-47.16 261.14,-37.2 252.11,-42.73 257.53,-47.16\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x1e92a09cf40>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape':'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','请输入成绩=?', shape='parallelogram')\n",
    "dot.node('3','x是否大等于90?', shape='diamond')\n",
    "dot.node('4','x是否大等于80?', shape='diamond')\n",
    "dot.node('5','x是否大等于70?', shape='diamond')\n",
    "dot.node('6','x是否大等于60?', shape='diamond')\n",
    "dot.node('a','Print A')\n",
    "dot.node('b','Print B')\n",
    "dot.node('c','Print C')\n",
    "dot.node('d','Print D')\n",
    "dot.node('e','Print E')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','a7','b7','c7','d7','e7'])\n",
    "dot.edge('3','a',label='Yes')\n",
    "dot.edge('3','4',label='No')\n",
    "dot.edge('4','b',label='Yes')\n",
    "dot.edge('4','5',label='No')\n",
    "dot.edge('5','c',label='Yes')\n",
    "dot.edge('5','6',label='No')\n",
    "dot.edge('6','d',label='Yes')\n",
    "dot.edge('6','e',label='No')\n",
    "dot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 3.4250000000000003\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "ename": "ExecutableNotFound",
     "evalue": "failed to execute WindowsPath('dot'), make sure the Graphviz executables are on your systems' PATH",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\backend\\execute.py:76\u001b[0m, in \u001b[0;36mrun_check\u001b[1;34m(cmd, input_lines, encoding, quiet, **kwargs)\u001b[0m\n\u001b[0;32m     75\u001b[0m         kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstdout\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstderr\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m subprocess\u001b[38;5;241m.\u001b[39mPIPE\n\u001b[1;32m---> 76\u001b[0m     proc \u001b[38;5;241m=\u001b[39m \u001b[43m_run_input_lines\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcmd\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minput_lines\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     77\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\backend\\execute.py:96\u001b[0m, in \u001b[0;36m_run_input_lines\u001b[1;34m(cmd, input_lines, kwargs)\u001b[0m\n\u001b[0;32m     95\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_run_input_lines\u001b[39m(cmd, input_lines, \u001b[38;5;241m*\u001b[39m, kwargs):\n\u001b[1;32m---> 96\u001b[0m     popen \u001b[38;5;241m=\u001b[39m \u001b[43msubprocess\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mPopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcmd\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstdin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msubprocess\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mPIPE\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     98\u001b[0m     stdin_write \u001b[38;5;241m=\u001b[39m popen\u001b[38;5;241m.\u001b[39mstdin\u001b[38;5;241m.\u001b[39mwrite\n",
      "File \u001b[1;32mC:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\\Lib\\subprocess.py:1026\u001b[0m, in \u001b[0;36mPopen.__init__\u001b[1;34m(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, user, group, extra_groups, encoding, errors, text, umask, pipesize, process_group)\u001b[0m\n\u001b[0;32m   1023\u001b[0m             \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstderr \u001b[38;5;241m=\u001b[39m io\u001b[38;5;241m.\u001b[39mTextIOWrapper(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstderr,\n\u001b[0;32m   1024\u001b[0m                     encoding\u001b[38;5;241m=\u001b[39mencoding, errors\u001b[38;5;241m=\u001b[39merrors)\n\u001b[1;32m-> 1026\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execute_child\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexecutable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpreexec_fn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mclose_fds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1027\u001b[0m \u001b[43m                        \u001b[49m\u001b[43mpass_fds\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcwd\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43menv\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1028\u001b[0m \u001b[43m                        \u001b[49m\u001b[43mstartupinfo\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcreationflags\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshell\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1029\u001b[0m \u001b[43m                        \u001b[49m\u001b[43mp2cread\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mp2cwrite\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1030\u001b[0m \u001b[43m                        \u001b[49m\u001b[43mc2pread\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mc2pwrite\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1031\u001b[0m \u001b[43m                        \u001b[49m\u001b[43merrread\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrwrite\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1032\u001b[0m \u001b[43m                        \u001b[49m\u001b[43mrestore_signals\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1033\u001b[0m \u001b[43m                        \u001b[49m\u001b[43mgid\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgids\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43muid\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mumask\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1034\u001b[0m \u001b[43m                        \u001b[49m\u001b[43mstart_new_session\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprocess_group\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m   1035\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[0;32m   1036\u001b[0m     \u001b[38;5;66;03m# Cleanup if the child failed starting.\u001b[39;00m\n",
      "File \u001b[1;32mC:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\\Lib\\subprocess.py:1538\u001b[0m, in \u001b[0;36mPopen._execute_child\u001b[1;34m(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_gid, unused_gids, unused_uid, unused_umask, unused_start_new_session, unused_process_group)\u001b[0m\n\u001b[0;32m   1537\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 1538\u001b[0m     hp, ht, pid, tid \u001b[38;5;241m=\u001b[39m \u001b[43m_winapi\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mCreateProcess\u001b[49m\u001b[43m(\u001b[49m\u001b[43mexecutable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1539\u001b[0m \u001b[43m                             \u001b[49m\u001b[38;5;66;43;03m# no special security\u001b[39;49;00m\n\u001b[0;32m   1540\u001b[0m \u001b[43m                             \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m   1541\u001b[0m \u001b[43m                             \u001b[49m\u001b[38;5;28;43mint\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;129;43;01mnot\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mclose_fds\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1542\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mcreationflags\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1543\u001b[0m \u001b[43m                             \u001b[49m\u001b[43menv\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1544\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mcwd\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m   1545\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mstartupinfo\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m   1546\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m   1547\u001b[0m     \u001b[38;5;66;03m# Child is launched. Close the parent's copy of those pipe\u001b[39;00m\n\u001b[0;32m   1548\u001b[0m     \u001b[38;5;66;03m# handles that only the child should have open.  You need\u001b[39;00m\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m   1551\u001b[0m     \u001b[38;5;66;03m# pipe will not close when the child process exits and the\u001b[39;00m\n\u001b[0;32m   1552\u001b[0m     \u001b[38;5;66;03m# ReadFile will hang.\u001b[39;00m\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\debugpy\\_vendored\\pydevd\\_pydev_bundle\\pydev_monkey.py:911\u001b[0m, in \u001b[0;36mcreate_CreateProcess.<locals>.new_CreateProcess\u001b[1;34m(app_name, cmd_line, *args)\u001b[0m\n\u001b[0;32m    909\u001b[0m     send_process_created_message()\n\u001b[1;32m--> 911\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m_subprocess\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moriginal_name\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43mapp_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcmd_line\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n",
      "\u001b[1;31mFileNotFoundError\u001b[0m: [WinError 2] 系统找不到指定的文件。",
      "\nThe above exception was the direct cause of the following exception:\n",
      "\u001b[1;31mExecutableNotFound\u001b[0m                        Traceback (most recent call last)",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\IPython\\core\\formatters.py:977\u001b[0m, in \u001b[0;36mMimeBundleFormatter.__call__\u001b[1;34m(self, obj, include, exclude)\u001b[0m\n\u001b[0;32m    974\u001b[0m     method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n\u001b[0;32m    976\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 977\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[43minclude\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minclude\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexclude\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexclude\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    978\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m    979\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\jupyter_integration.py:98\u001b[0m, in \u001b[0;36mJupyterIntegration._repr_mimebundle_\u001b[1;34m(self, include, exclude, **_)\u001b[0m\n\u001b[0;32m     96\u001b[0m include \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m(include) \u001b[38;5;28;01mif\u001b[39;00m include \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m {\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jupyter_mimetype}\n\u001b[0;32m     97\u001b[0m include \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m(exclude \u001b[38;5;129;01mor\u001b[39;00m [])\n\u001b[1;32m---> 98\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m{\u001b[49m\u001b[43mmimetype\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmethod_name\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     99\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mmimetype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmethod_name\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mMIME_TYPES\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    100\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mmimetype\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43minclude\u001b[49m\u001b[43m}\u001b[49m\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\jupyter_integration.py:98\u001b[0m, in \u001b[0;36m<dictcomp>\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m     96\u001b[0m include \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m(include) \u001b[38;5;28;01mif\u001b[39;00m include \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m {\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jupyter_mimetype}\n\u001b[0;32m     97\u001b[0m include \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m(exclude \u001b[38;5;129;01mor\u001b[39;00m [])\n\u001b[1;32m---> 98\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m {mimetype: \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmethod_name\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     99\u001b[0m         \u001b[38;5;28;01mfor\u001b[39;00m mimetype, method_name \u001b[38;5;129;01min\u001b[39;00m MIME_TYPES\u001b[38;5;241m.\u001b[39mitems()\n\u001b[0;32m    100\u001b[0m         \u001b[38;5;28;01mif\u001b[39;00m mimetype \u001b[38;5;129;01min\u001b[39;00m include}\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\jupyter_integration.py:112\u001b[0m, in \u001b[0;36mJupyterIntegration._repr_image_svg_xml\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    110\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_repr_image_svg_xml\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[0;32m    111\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"Return the rendered graph as SVG string.\"\"\"\u001b[39;00m\n\u001b[1;32m--> 112\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpipe\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mformat\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msvg\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mSVG_ENCODING\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\piping.py:104\u001b[0m, in \u001b[0;36mPipe.pipe\u001b[1;34m(self, format, renderer, formatter, neato_no_op, quiet, engine, encoding)\u001b[0m\n\u001b[0;32m     55\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpipe\u001b[39m(\u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m     56\u001b[0m          \u001b[38;5;28mformat\u001b[39m: typing\u001b[38;5;241m.\u001b[39mOptional[\u001b[38;5;28mstr\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m     57\u001b[0m          renderer: typing\u001b[38;5;241m.\u001b[39mOptional[\u001b[38;5;28mstr\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m     61\u001b[0m          engine: typing\u001b[38;5;241m.\u001b[39mOptional[\u001b[38;5;28mstr\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m     62\u001b[0m          encoding: typing\u001b[38;5;241m.\u001b[39mOptional[\u001b[38;5;28mstr\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m typing\u001b[38;5;241m.\u001b[39mUnion[\u001b[38;5;28mbytes\u001b[39m, \u001b[38;5;28mstr\u001b[39m]:\n\u001b[0;32m     63\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"Return the source piped through the Graphviz layout command.\u001b[39;00m\n\u001b[0;32m     64\u001b[0m \n\u001b[0;32m     65\u001b[0m \u001b[38;5;124;03m    Args:\u001b[39;00m\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    102\u001b[0m \u001b[38;5;124;03m        '<?xml version='\u001b[39;00m\n\u001b[0;32m    103\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[1;32m--> 104\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_pipe_legacy\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mformat\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m    105\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    106\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mformatter\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mformatter\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    107\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mneato_no_op\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mneato_no_op\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    108\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mquiet\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquiet\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    109\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mengine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mengine\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    110\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\_tools.py:171\u001b[0m, in \u001b[0;36mdeprecate_positional_args.<locals>.decorator.<locals>.wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m    162\u001b[0m     wanted \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m, \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mvalue\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m    163\u001b[0m                        \u001b[38;5;28;01mfor\u001b[39;00m name, value \u001b[38;5;129;01min\u001b[39;00m deprecated\u001b[38;5;241m.\u001b[39mitems())\n\u001b[0;32m    164\u001b[0m     warnings\u001b[38;5;241m.\u001b[39mwarn(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mThe signature of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m will be reduced\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m    165\u001b[0m                   \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m to \u001b[39m\u001b[38;5;132;01m{\u001b[39;00msupported_number\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m positional args\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m    166\u001b[0m                   \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlist\u001b[39m(supported)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m: pass \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mwanted\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m    167\u001b[0m                   \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m as keyword arg(s)\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[0;32m    168\u001b[0m                   stacklevel\u001b[38;5;241m=\u001b[39mstacklevel,\n\u001b[0;32m    169\u001b[0m                   category\u001b[38;5;241m=\u001b[39mcategory)\n\u001b[1;32m--> 171\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\piping.py:121\u001b[0m, in \u001b[0;36mPipe._pipe_legacy\u001b[1;34m(self, format, renderer, formatter, neato_no_op, quiet, engine, encoding)\u001b[0m\n\u001b[0;32m    112\u001b[0m \u001b[38;5;129m@_tools\u001b[39m\u001b[38;5;241m.\u001b[39mdeprecate_positional_args(supported_number\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[0;32m    113\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_pipe_legacy\u001b[39m(\u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m    114\u001b[0m                  \u001b[38;5;28mformat\u001b[39m: typing\u001b[38;5;241m.\u001b[39mOptional[\u001b[38;5;28mstr\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    119\u001b[0m                  engine: typing\u001b[38;5;241m.\u001b[39mOptional[\u001b[38;5;28mstr\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m    120\u001b[0m                  encoding: typing\u001b[38;5;241m.\u001b[39mOptional[\u001b[38;5;28mstr\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m typing\u001b[38;5;241m.\u001b[39mUnion[\u001b[38;5;28mbytes\u001b[39m, \u001b[38;5;28mstr\u001b[39m]:\n\u001b[1;32m--> 121\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_pipe_future\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mformat\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m    122\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    123\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mformatter\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mformatter\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    124\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mneato_no_op\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mneato_no_op\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    125\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mquiet\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquiet\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    126\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mengine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mengine\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    127\u001b[0m \u001b[43m                             \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\piping.py:149\u001b[0m, in \u001b[0;36mPipe._pipe_future\u001b[1;34m(self, format, renderer, formatter, neato_no_op, quiet, engine, encoding)\u001b[0m\n\u001b[0;32m    146\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m encoding \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m    147\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m codecs\u001b[38;5;241m.\u001b[39mlookup(encoding) \u001b[38;5;129;01mis\u001b[39;00m codecs\u001b[38;5;241m.\u001b[39mlookup(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mencoding):\n\u001b[0;32m    148\u001b[0m         \u001b[38;5;66;03m# common case: both stdin and stdout need the same encoding\u001b[39;00m\n\u001b[1;32m--> 149\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_pipe_lines_string\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    150\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m    151\u001b[0m         raw \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pipe_lines(\u001b[38;5;241m*\u001b[39margs, input_encoding\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mencoding, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\backend\\piping.py:212\u001b[0m, in \u001b[0;36mpipe_lines_string\u001b[1;34m(engine, format, input_lines, encoding, renderer, formatter, neato_no_op, quiet)\u001b[0m\n\u001b[0;32m    206\u001b[0m cmd \u001b[38;5;241m=\u001b[39m dot_command\u001b[38;5;241m.\u001b[39mcommand(engine, \u001b[38;5;28mformat\u001b[39m,\n\u001b[0;32m    207\u001b[0m                           renderer\u001b[38;5;241m=\u001b[39mrenderer,\n\u001b[0;32m    208\u001b[0m                           formatter\u001b[38;5;241m=\u001b[39mformatter,\n\u001b[0;32m    209\u001b[0m                           neato_no_op\u001b[38;5;241m=\u001b[39mneato_no_op)\n\u001b[0;32m    210\u001b[0m kwargs \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124minput_lines\u001b[39m\u001b[38;5;124m'\u001b[39m: input_lines, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mencoding\u001b[39m\u001b[38;5;124m'\u001b[39m: encoding}\n\u001b[1;32m--> 212\u001b[0m proc \u001b[38;5;241m=\u001b[39m \u001b[43mexecute\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_check\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcmd\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcapture_output\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mquiet\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquiet\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    213\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m proc\u001b[38;5;241m.\u001b[39mstdout\n",
      "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\graphviz\\backend\\execute.py:81\u001b[0m, in \u001b[0;36mrun_check\u001b[1;34m(cmd, input_lines, encoding, quiet, **kwargs)\u001b[0m\n\u001b[0;32m     79\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m     80\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m e\u001b[38;5;241m.\u001b[39merrno \u001b[38;5;241m==\u001b[39m errno\u001b[38;5;241m.\u001b[39mENOENT:\n\u001b[1;32m---> 81\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m ExecutableNotFound(cmd) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[0;32m     82\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m\n\u001b[0;32m     84\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m quiet \u001b[38;5;129;01mand\u001b[39;00m proc\u001b[38;5;241m.\u001b[39mstderr:\n",
      "\u001b[1;31mExecutableNotFound\u001b[0m: failed to execute WindowsPath('dot'), make sure the Graphviz executables are on your systems' PATH"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x1b7ce872250>"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 12.2.0 (20241103.1931)\n",
       " -->\n",
       "<!-- Title: 分支结构 Pages: 1 -->\n",
       "<svg width=\"420pt\" height=\"404pt\"\n",
       " viewBox=\"0.00 0.00 419.60 404.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 400)\">\n",
       "<title>分支结构</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-400 415.6,-400 415.6,4 -4,4\"/>\n",
       "<!-- 1 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"232.8,-396 178.8,-396 178.8,-360 232.8,-360 232.8,-396\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-371.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">开始</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"347.88,-324 121.87,-324 63.72,-288 289.74,-288 347.88,-324\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-300.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">输入Real Number =?</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-359.7C205.8,-352.41 205.8,-343.73 205.8,-335.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-335.62 205.8,-325.62 202.3,-335.62 209.3,-335.62\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"205.8,-252 0,-234 205.8,-216 411.6,-234 205.8,-252\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-228.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">判断RealNumber是否大于0？</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-287.7C205.8,-280.41 205.8,-271.73 205.8,-263.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-263.62 205.8,-253.62 202.3,-263.62 209.3,-263.62\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"195.68,-180 31.93,-180 31.93,-144 195.68,-144 195.68,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"113.8\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">RealNumber=RealNumber</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;4 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>3&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M185.38,-217.46C173.69,-208.56 158.75,-197.2 145.55,-187.16\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"148.03,-184.65 137.96,-181.38 143.79,-190.22 148.03,-184.65\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"381.93,-180 213.68,-180 213.68,-144 381.93,-144 381.93,-180\"/>\n",
       "<text text-anchor=\"middle\" x=\"297.8\" y=\"-156.95\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">RealNumber=&#45;RealNumber</text>\n",
       "</g>\n",
       "<!-- 3&#45;&gt;5 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>3&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M226.22,-217.46C237.92,-208.56 252.86,-197.2 266.05,-187.16\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"267.81,-190.22 273.65,-181.38 263.57,-184.65 267.81,-190.22\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"301.15,-108 149.47,-108 110.45,-72 262.13,-72 301.15,-108\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-83.83\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">输出绝对值</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;6 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M136.54,-143.7C147.82,-135.11 161.63,-124.61 173.95,-115.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"175.96,-118.1 181.8,-109.26 171.72,-112.53 175.96,-118.1\"/>\n",
       "</g>\n",
       "<!-- 5&#45;&gt;6 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>5&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M275.06,-143.7C263.78,-135.11 249.97,-124.61 237.66,-115.24\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"239.88,-112.53 229.81,-109.26 235.64,-118.1 239.88,-112.53\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>7</title>\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"232.8,-36 178.8,-36 178.8,0 232.8,0 232.8,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"205.8\" y=\"-11.82\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">结束</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\">\n",
       "<title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M205.8,-71.7C205.8,-64.41 205.8,-55.73 205.8,-47.54\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"209.3,-47.62 205.8,-37.62 202.3,-47.62 209.3,-47.62\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x1e92a09cfd0>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 55\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\"\"C:\\Users\\liyusen\\Desktop\\999.jpg\"\" width=\"150 \" alt=\"123\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\\\\\\|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(x@@$$$$@$BBO||\\\\\\\\\\\\\\|J&$$$$$$$%8aj\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\(r$$$@$B{(()((1{$$$$@r|($@$Bb}|()((((Z$$$$m/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\a@B*)((((((((((((((((@$$$$?(|(((((((((((((c@@8(|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)$$#|((((((((((((((((((B@@{/)((((((((((((((((/p$@|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$$L((((((((((((((((((((((()(((((((((((((((((((({$B|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/n$@((((((((((((((((((((((((((((((((((((((((((((((W@$||\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\8@$)(((((((((((((((((((((((((((((((((((((((((((((}$$||\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|)$$)(((((((((((((((((((((((((((((((((((((((((((((B$@\\|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$$c(((((((((((((((((((((((((((((((((((((((((((((@%x\\|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\t@$)\\((((((((((((((((((((((((((((((((((((((((((k$@|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\W$$|(((((((((((((((((((((((((((((((((((((((()t$@|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\C@@)(((((((((((((((((((((((((((((((((((((((%$$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\tB$B(((((((((((((((((((((((((((((((((((()@$%|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*@@\\)((((((((((((((((((((((((((((((|)8@%\\\\|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\tx%@&(((((((((((((((((((((((((((|WB$@)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|MBB@{|((((((((((((((((((((1(@$B%\\\\\\|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\f@$$$B|t)(((((((((((()/|@@$$$@C(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|B$$:'$$$%@@((((((((|)&@$$*.^':8$@/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\f$$%` &$#'..(B$$@$@@@$$$$+ .....'@$%|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\j$@\" @B$^.'&% ..h&_...$$'..     .$$$|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\@$$ \\$@...  ''..'\\`.'@$B.      .^$@\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|t@$  $@'. %$@$$@@$$`.B$$....   .%$M\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$@U.$$\".. ........ .$$w.  . .'$@B/|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)@$$.I$$`. ..        ...    ..'$8|||\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\j$@........               ..B@u|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|\\@B........               ..$$8\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\B$ `.                    ..$$%\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\@$j .                    ..%@|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$$'.....                ..$B/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|\\@$@$$$W^.               ^$$$$$$$Mx\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|$$$$$$$$@b. `.....             . M@@ .'``$$)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\z$%.:$'....  .                ..`u@B:. ... $$|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\1@$'.......                  .^!$@*^.. ...\"$@\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$@$'.                     .I#$@$ ..      `$$J\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|@$8^            ..  .^B$$$$o`'..        ..@$)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|$@B..   . .o$$$$$$@$B$B@$$$$$$$$ ' ..... $@/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\M$$a^ .xB$$$@//(\\\\\\\\\\|(\\\\t|(18@@$B@WM$@$${|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|)M$$$@B(||\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|\\\\|\\th$k\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|//|\\\\)vbMfc|((\\\\ft||\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|%8B@$$$$@$$$$$$$$$@@%%&|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\U%B$$@$$$$$$$$$$$$$@%%/\\\\|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/|\\\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",
      "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\".\\\\aixin.jpg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
